iT邦幫忙

2022 iThome 鐵人賽

DAY 18
0

今天來介紹trait的不同用法

  • 當作介面(interface)使用
  • 定義抽象屬性(abstract fields)
  • 當作抽象類別使用

當作介面使用

當我們想要像在Java一樣創建一個介面時(只有方法簽名而沒有實作),我們可以使用特徵。

trait HasFourLegs:
    def fur(): Unit
    def running(speed: Double): Unit

//如果一個類別extends特徵時沒有實作它全部的抽象方法,那這個類別就要宣告為抽象類別
abstract class Cat extends HasFourLegs: 

class Dog extends HasFourLegs:
    def fur(): Unit = println("golden!")
    def running(speed: Double): Unit = println(s"Speed is $speed km/hr")

定義抽象屬性

當我們想要宣告特徵的屬性但是又不想設定初始值時,也就是說宣告為抽象。

trait Pizza:
    def Topping: Int

class Food extends Pizza:
    val Topping = 3

一個特徵(trait)的屬性(field)可以是抽象或具體的
如果給它一個值,那它就是具體的。反之,則為抽象的。

當作抽象類別使用

trait Pet:
    def talk() = println("Hi")
    def come(): Unit

class Dog extends Pet:
    def come() = println("bark~")

class Cat extends Pet:
    override def talk() = println("meow")
    def come() = println("No.")

上一篇
[Day 17]Scala Traits
下一篇
[Day 19]Scala Package
系列文
連續30天 初學者介紹Scala語言30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言